package com.zretc.controller;

import javax.servlet.http.HttpSession;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.SessionAttributes;

import com.zretc.entity.Users;

/**
 * "u1" 如果在这里写了一个 @SessionAttributes("u1") 要保证这个u1
 * 已经通过某个方法前的. @ModelAttribute(value = "u1")进行实例操作
 * 
 * @author Administrator
 *
 */
@Controller
@RequestMapping("mc")
@SessionAttributes(value = { "u","u1", "u2" })
public class ModelController {

	/**
	 * 此时，我可以传递参数，也可以不传递参数 传递就是具体的值，不传递就是null
	 * 
	 * @param name
	 * @return
	 */
	@GetMapping("hello01")
	public String hello01(String name) {
		System.out.println("name :" + name);
		return "hello01";
	}

	@GetMapping("hello03")
	public String getUser3(HttpSession session) {
		session.setAttribute("key", "value");
		// 测试代码
		return "hello03";
	}

	/**
	 * @ModelAttribute("u1") Users u 此时 我们的modelAttribute放在方法参数位置，其作用；
	 * 作为参数:使用表单或者其他方法来提交u对象(hello02?属性名1=值&属性名2=值) 属性名1属性名2是Users类型的属性;
	 * 会将u1对象存在属性范围内;
	 * 
	 * mc/hello02 当成响应的视图资源 web-inf/jsp/mc/hello02.jsp
	 * 
	 * @param u
	 * @return
	 */
	@GetMapping("hello02")
	public Users getUser1(@ModelAttribute("u1") Users u1) {
		System.out.println("************  getUser1 ************ :");
		return u1;
	}
	
	@ModelAttribute(value = "u1")
	public Users getUse1r() {
		System.out.println("************  getUser1 ************ :");
		Users users = new Users();
		users.setId(1011);
		users.setUsername("tomcat1011");
		return users;
	}

	/**
	 * 放在方法前,当我们请求某个映射地址的时候，会先执行这个方法的代码; 主要功能：在请求某个地址之前需要实例化对象;
	 * 
	 * 
	 * @return
	 */
	@ModelAttribute(value = "u")
	public Users getUser() {
		System.out.println("************  getUser ************ :");
		Users users = new Users();
		users.setId(101);
		users.setUsername("tomcat");
		return users;
	}

	@ModelAttribute(value = "u2")
	public Users getUser2() {
		System.out.println("************  getUser2 ************ :");
		Users users = new Users();
		users.setId(2);
		users.setUsername("tomcat222");
		return users;
	}

	
}
